// 导入axios
import axios from 'axios'
import store from '@/store'
import router from '@/router'

import { Message } from 'element-ui'
// 导入操作token事件的方法
import { getTimeStemp } from './auth'
// 设置token的过期时间
let expressTime = 30 * 60 * 1000

// 创建axios的副本实例
const instance = axios.create({
  baseURL: '/api'
})
// 设置拦截器
instance.interceptors.request.use(config => {
  const token = store.getters.token
  if (token) {
    // 获取当前token时间戳
    let currentTime = Date.now()
    // 得到token的保存时间
    let tokenTime = getTimeStemp()
    // 得到时间差
    let space = currentTime - tokenTime
    // 进行token时间判断
    if (space > expressTime) {
      store.dispatch('user/logout')
      router.push('/login')
      Message.error('登陆失败,请重新登陆')
      // 终止后续代码执行
      return Promise.reject(new Error('token失效') ) 
    }
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
}, error => {
  return Promise.reject(error)
})
instance.interceptors.response.use(response => {
  const { data, message, success } = response.data
  if (success) {
    return response
  } else {
    return Promise.reject(new Error(message))
  }
},
  // 响应失败时的回调函数
  error => {
    if (error.response && error.response.data && error.response.data.code === 10002) {
      // 当前错误为token失效
      store.dispatch('user/logout')
      router.push('/login')
    }
  return Promise.reject(error)
})
// 导出
export default instance
